class FluidSimData {
	public:
		friend class FluidSim;
		FluidSimData ( int Size );										// Allocates proper memory for the fluid simulation
		~FluidSimData ();												// Deallocates Memory

		// Consider Inlining
		const float VelocityX( unsigned int I, unsigned int J);			// returns velocty X position given I,J index
		const float VelocityY( unsigned int I, unsigned int J);			// returns velocity Y position given I,J index
		const float VelocityX_Prev(unsigned int I, unsigned int J);
		const float VelocityY_Prev(unsigned int I, unsigned int J);
		const float Density( unsigned int I, unsigned int J);			// returns the density at index I J
		const float Density_Prev(unsigned int I, unsigned int J);
		int Size() {return mSize; }
		void ScreenToIndex( unsigned int ScreenWidth, unsigned int ScreenHeight, unsigned int X, unsigned int Y, unsigned int &I, unsigned int &J ); // Converts screenspace to fluid space

	private:
		float *mU; // X Coordinate of Velocity
		float *mU_prev;
		float *mV; // y coordinate of velocity
		float *mV_prev;
		float *mD; // density value
		float *mD_prev;

		int mSize;
}